<?php

namespace partner\functions\wechat\lib;

use Exception;
use partner\functions\wechat\lib\SubjectInfo\BusinessLicenseInfo;
use partner\functions\wechat\lib\SubjectInfo\CertificateInfo;
use partner\functions\wechat\lib\SubjectInfo\FinanceInstitutionInfo;
use partner\functions\wechat\lib\SubjectInfo\IdentityInfo;

class SubjectInfo
{
    protected $upload_properties = [
        'certificate_letter_copy' => 1
    ];

    // 主体类型
    public $subject_type = '';

    private $allowed_subject_type = [
        // 个体户
        'SUBJECT_TYPE_INDIVIDUAL',
        // 企业
        'SUBJECT_TYPE_ENTERPRISE',
        // 政府机关
        'SUBJECT_TYPE_GOVERNMENT',
        // 事业单位
        'SUBJECT_TYPE_INSTITUTIONS',
        // 社会组织
        'SUBJECT_TYPE_OTHERS'
    ];

    // 是否是金融机构
    public $finance_institution = false;

    // 营业执照
    public $business_license_info = null;

    // 登记证书
    public $certificate_info = null;

    // 金融机构许可证信息
    public $finance_institution_info = null;

    // 经营者/法人身份证件
    // 个体户：请上传经营者的身份证
    // 企业/社会组织：请上传法人的身份证件。
    // 政府机关/事业单位：请上传法人/经办人的身份证件。
    public $identity_info = null;

    // 单位证明函照片
    // 主体类型为政府机关、事业单位选传：
    // 若上传，则审核通过后即可签约，无需汇款验证。
    // 若未上传，则审核通过后，需汇款验证。
    // 主体为个体户、企业、其他组织等，不需要上传本字段。
    public $certificate_letter_copy = '';

    public function setCertificateLetterCopy(string $certificate_letter_copy = '')
    {
        if ($certificate_letter_copy) {
            if (! file_exists($certificate_letter_copy))
                throw new Exception("单位证明函照片不存在");

            $this->certificate_letter_copy = $certificate_letter_copy;
        }
    }

    public function setIdentityInfo(IdentityInfo $identity_info)
    {
        $this->identity_info = $identity_info;
    }

    public function setFinanceInstitutionInfo(FinanceInstitutionInfo $finance_institution_info)
    {
        $this->finance_institution_info = $finance_institution_info;
    }

    public function setCertificateInfo(CertificateInfo $certificate_info)
    {
        $this->certificate_info = $certificate_info;
    }

    public function setBusinessLicenseInfo(BusinessLicenseInfo $business_license_info)
    {
        $this->business_license_info = $business_license_info;
    }

    public function setSubjectType(string $subject_type = '')
    {
        if (empty($subject_type))
            throw new Exception("主体类型不能为空");
        if (! in_array($subject_type, $this->allowed_subject_type))
            throw new Exception("非法主体类型");
        
        $this->subject_type = $subject_type;
    }


}